package com.partner.action.sysright;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.partner.bean.sysright.Sysbuttons;
import com.partner.bean.sysright.TRelationship;
import com.partner.bean.sysright.TSysrightVo;
import com.partner.bean.sysright.TSysrole;
import com.partner.bean.sysright.TsysroleVo;
import com.partner.frame.BaseAction;
import com.partner.frame.Result;
import com.partner.frame.common.ConstantsMark;
import com.partner.service.sysright.SysButtonsService;
import com.partner.service.sysright.SysRelationshipManagerService;
import com.partner.service.sysright.SysRightManagerService;
import com.partner.service.sysright.SysRoleManagerService;


/** 
 * @ClassName: SysRoleManagerAction 
 * @Description: 管理员管理 --> 角色管理控制器
 * @author Lizuoyang 
 * @date 2017年4月28日 下午2:48:08  
 */ 
@Controller
@RequestMapping("/sysrole")
public class SysRoleManagerAction extends BaseAction {
	
	@Autowired
	private SysRoleManagerService sysRoleManagerService;
	
	@Autowired
	private SysRightManagerService sysRightManagerService;
	
	@Autowired
	SysButtonsService sysButtonsService;
	
	@Autowired
	private SysRelationshipManagerService sysRelationshipManagerService;
	
	/**
	 * @Title      : sysrolelist 
	 * @Description: 查询出所有角色  成功后跳转至角色列表首页
	 * @return     : String
	 * @author     : Lizuoyang
	 * Create Date : 2017年4月28日 下午2:59:58
	 * @throws 
	 */
	@RequestMapping(value="/sysrolelist",method=RequestMethod.GET)
	public ModelAndView sysrolelist(HttpServletRequest request,HttpServletResponse response){
		ModelAndView result = new ModelAndView();
		List<TSysrole> data = sysRoleManagerService.getAllRoles();
		result.addObject("data", data);
		result.setViewName("/pages/sysright/sysrole");
		return result;
	}
	
	
	/**
	 * @Title      : sysrolebeforeupd 
	 * @Description: 通过角色ID查询出角色的数据及此角色拥有的权限  成功后跳转至角色编辑界面
	 * @param id
	 * @return     : ModelAndView
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月3日 上午8:46:18
	 * @throws 
	 */
	@RequestMapping(value="/sysrolebeforeupd",method=RequestMethod.GET)
	public ModelAndView sysrolebeforeupd(int id){
		ModelAndView result = new ModelAndView();
		//通过角色ID查询对应角色
		TSysrole sysrole = sysRoleManagerService.getRoleByPrimaryKey(id);
		
		//所有权限  父节点以及子节点（未判断是否选中）
		List<TSysrightVo> allRights = sysRightManagerService.getRightsItem();
		//获取系统所有按钮功能
		//List<Sysbuttons> allButtons = sysButtonsService.getAllButtons();
		//设置对应权限被选中
		sysRightManagerService.allRightsMachine(allRights,id);
		
		result.addObject("role", sysrole);
		result.addObject("allRight", allRights);
		result.setViewName("/pages/sysright/sysroleupd");
		return result;
	}
	
	/**
	 * @Title      : sysroleafterupd 
	 * @Description: 修改角色 删除景区权限和菜单权限 再重新插入选择的景区权限和菜单权限
	 * @param role
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月2日 下午4:04:23
	 * @throws 
	 */
	@RequestMapping(value="/sysroleafterupd",method=RequestMethod.POST)
	@ResponseBody
	public Result sysroleafterupd(TsysroleVo role){
		Result result = new Result();
			//修改角色基本信息
			sysRoleManagerService.updateByPrimaryKey(role);
			
			//删除此角色拥有的所有权限
			sysRelationshipManagerService.deleteRelationByRoleId(role.getId());
				
			//新增管理员选择的权限给予此角色
			int[] rightids = role.getRightid();
				for (int i : rightids) {
					TRelationship record = new TRelationship();
					record.setRoleid(role.getId());
					record.setRightid(i);
					String buttonsv = "" ;
					for(String s : role.getButtons()){
						String[] ib = s.split(",");
						if(ib.length>0){
							if(ib[0]!=null&&!ib[0].equals("")&&Integer.valueOf(ib[0])==i){
								if(ib[1]!=null&&!ib[1].equals("")){
									if(buttonsv.equals("")){
										buttonsv = ib[1];
									}else{
										buttonsv =buttonsv + "," + ib[1] ;
									}
									
								}
							}
						}
					}
					record.setButtons(buttonsv);
					sysRelationshipManagerService.insert(record);
				}
			
				
				
			//新增管理员选择的景区给予此角色
//			int[] scenicids = role.getScenicid();
//				for (int i : scenicids) {
//					TRoleScenicRelation record = new TRoleScenicRelation();
//					record.setRoleid(role.getId());
//					record.setScenicspotid(i);
//					tRoleScenicRelationService.insert(record);
//				}
		result.setStatus(ConstantsMark.HTTP_STATUS_200);
		result.setDesc(ConstantsMark.INFO_UPDATESUCCESS);
		return result;
	}
	
	/**
	 * @Title      : sysrolebeforeadd 
	 * @Description: 角色新增之前查询出所有景区和所有的权限
	 * @return     : ModelAndView
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月3日 下午1:47:30
	 * @throws 
	 */
	@RequestMapping(value="/sysrolebeforeadd",method=RequestMethod.GET)
	public ModelAndView sysrolebeforeadd(){
		ModelAndView mv = new ModelAndView();
		
		//所有权限  父节点以及子节点（未判断是否选中）
		List<TSysrightVo> allRights = sysRightManagerService.getRightsItem();
		
		mv.addObject("allRight", allRights);
		mv.setViewName("/pages/sysright/sysroleadd");
		return mv;
	}
	
	/**
	 * @Title      : sysroleafteradd 
	 * @Description: 新增角色 插入选择的景区权限和菜单权限
	 * @param role
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月3日 下午2:05:25
	 * @throws 
	 */
	@RequestMapping(value="/sysroleafteradd",method=RequestMethod.POST)
	@ResponseBody
	public Result sysroleafteradd(TsysroleVo role){
		Result result = new Result();
		
			sysRoleManagerService.insert(role);
			
			//新增管理员选择的权限给予此角色
			int[] rightids = role.getRightid();
			for (int i : rightids) {
				TRelationship record = new TRelationship();
				record.setRoleid(role.getId());
				record.setRightid(i);
				String buttonsv = "" ;
				if(role.getButtons()!=null&&role.getButtons().length>0){
					for(String s : role.getButtons()){
						String[] ib = s.split(",");
						if(ib.length>0){
							if(ib[0]!=null&&!ib[0].equals("")&&Integer.valueOf(ib[0])==i){
								if(ib[1]!=null&&!ib[1].equals("")){
									if(buttonsv.equals("")){
										buttonsv = ib[1];
									}else{
										buttonsv =buttonsv + "," + ib[1] ;
									}
									
								}
							}
						}
				}
				
				}
				record.setButtons(buttonsv);
				sysRelationshipManagerService.insert(record);
			}
			
			//新增管理员选择的景区给予此角色
//			int[] scenicids = role.getScenicid();
//			for (int i : scenicids) {
//				TRoleScenicRelation record = new TRoleScenicRelation();
//				record.setRoleid(role.getId());
//				record.setScenicspotid(i);
//				tRoleScenicRelationService.insert(record);
//			}
			
		result.setStatus(ConstantsMark.HTTP_STATUS_200);
		result.setDesc(ConstantsMark.INFO_SAVESUCCESS);
		return result;
	}
	
	/**
	 * @Title      : deleterole 
	 * @Description: 根据参数传递的主键ID删除角色 并删除角色有关的景区权限和菜单权限
	 * @param id	 角色ID
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月3日 下午2:11:22
	 * @throws 
	 */
	@RequestMapping(value="/deleterole",method=RequestMethod.POST)
	@ResponseBody
	public Result deleterole(int id){
		Result result = new Result();
			//删除角色
			sysRoleManagerService.deleteByPrimaryKey(id);
			
			//删除此角色拥有的所有权限
			sysRelationshipManagerService.deleteRelationByRoleId(id);
			
			//删除此角色所属的景区列表
			//tRoleScenicRelationService.deleteByRoleId(id);
		result.setStatus(ConstantsMark.HTTP_STATUS_200);
		result.setDesc(ConstantsMark.INFO_DELETESUCCESS);
		return result;
	}
	
	/**
	 * @Title      : delteroleByBatch 
	 * @Description: 批量删除角色
	 * @param id
	 * @return     : Result
	 * @author     : Lizuoyang
	 * Create Date : 2017年5月5日 下午4:28:54
	 * @throws 
	 */
	@RequestMapping(value="/delteroleByBatch",method=RequestMethod.POST)
	@ResponseBody
	public Result  delteroleByBatch(String id){
		Result result = new Result();
		String[] arr = id.split(",");
			for (String i : arr) {
				//删除角色
				sysRoleManagerService.deleteByPrimaryKey(Integer.valueOf(i));
			}
		result.setStatus(ConstantsMark.HTTP_STATUS_200);
		result.setDesc(ConstantsMark.INFO_DELETESUCCESS);
		return result;
	}
}
